<?php
define('ENVIAR_CLAVE', 184);
define('ROL_EVALUADOR', 35);
define('USUARIOS',185);
define('ROLES',186);

class Usuarios extends CI_Controller
{
    
    function Usuarios()
	{
        parent::__construct();
		date_default_timezone_set('America/El_Salvador');
		$this->load->model('seguridad_model');
		$this->load->model('evaluacion_model');
		$this->load->model('usuario_model');
		
		$this->load->library("mpdf");
    	if(!$this->session->userdata('id_usuario')) {
			redirect('index.php/sessiones');
		}
    }
	
	function index()
	{
		//$this->roles();

  	}
	
	/*
	*	Nombre: roles
	*	Objetivo: Carga la vista para la administracion de los roles
	*	Hecha por: Leonel
	*	Modificada por: Oscar
	*	Última Modificación: 07/07/2014
	*	Observaciones: Ninguna.
	*/
	function roles($estado_transaccion=NULL,$accion=NULL)
	{

		$data['id_modulo']=ROLES;
		consultar_permiso(ROLES);
		
		$data['roles']=$this->usuario_model->mostrar_roles();
		$data['estado_transaccion']=$estado_transaccion;
			
			
		if($accion==0)
			$data['accion']="elimina";
		if($accion==1)
			$data['accion']="actualiza";
		if($accion==2)
			$data['accion']="guarda";
		pantalla('usuarios/roles',$data);
	}
	
	/*
	*	Nombre: datos_de_rol
	*	Objetivo: Carga la vista para crear o modificar los roles
	*	Hecha por: Leonel
	*	Modificada por: Oscar
	*	Última Modificación: 03/07/2014
	*	Observaciones: Ninguna.
	*/
	function datos_de_rol($id_rol=NULL)
	{
		$data['id_modulo']=ROLES;
		consultar_permiso(ROLES);
		$data['menu']=$this->usuario_model->mostrar_menu($id_rol);
		
		if($id_rol!=NULL)			
			$data['rol']=$this->usuario_model->mostrar_roles($id_rol);
		else
			$data['rol']=array();
		$this->load->view('usuarios/formu_rol',$data);	
	}
	
	/*
	*	Nombre: guardar_rol
	*	Objetivo: Guarda los registros de roles
	*	Hecha por: Leonel
	*	Modificada por: Oscar
	*	Última Modificación: 07/07/2014
	*	Observaciones: Ninguna.
	*/
	function guardar_rol()
	{
		$data['id_modulo']=ROLES;
		consultar_permiso(ROLES);
		
		$this->db->trans_start();
		$nombre_rol=strtoupper($this->input->post('nombre_rol'));
		$descripcion_rol=$this->input->post('descripcion_rol');
		
		$formuInfo = array(
			'nombre_rol'=>$nombre_rol,
			'descripcion_rol'=>$descripcion_rol
		);
		
		$id_rol=$this->usuario_model->guardar_rol($formuInfo); /*Guardando rol*/
		$permiso=$this->input->post('permiso');
		
		for($i=0;$i<count($permiso);$i++) {
			if($permiso[$i]!="") {
				$explode_permiso=explode(",",$permiso[$i]);
				$id_modulo=$explode_permiso[0];
				$id_permiso=$explode_permiso[1];
				$formuInfo = array(
					'id_rol'=>$id_rol,
					'id_modulo'=>$id_modulo,
					'id_permiso'=>$id_permiso,
					'estado'=>1
				);
				$this->usuario_model->guardar_permisos_rol($formuInfo); /*Guardando permisos del rol*/
				
				$data=$this->usuario_model->buscar_padre_permisos_rol($id_modulo); 
				if($data['padre']!="") {
					$formuInfo = array(
						'id_rol'=>$id_rol,
						'id_modulo'=>$data['padre'],
						'id_permiso'=>$id_permiso,
						'estado'=>1
					);
					$total=$this->usuario_model->buscar_padre_modulo_rol($id_rol,$data['padre']);
					if($total['total']==0)
						$this->usuario_model->guardar_permisos_rol($formuInfo); /*Guardando permisos del rol para el padre*/
				}
				
				if($data['abuelo']!="") {
					$formuInfo = array(
						'id_rol'=>$id_rol,
						'id_modulo'=>$data['abuelo'],
						'id_permiso'=>$id_permiso,
						'estado'=>1
					);
					$total=$this->usuario_model->buscar_padre_modulo_rol($id_rol,$data['abuelo']);
					if($total['total']==0)
						$this->usuario_model->guardar_permisos_rol($formuInfo); /*Guardando permisos del rol para el abuelo*/
				}
				
				if($data['bisabuelo']!="") {
					$formuInfo = array(
						'id_rol'=>$id_rol,
						'id_modulo'=>$data['bisabuelo'],
						'id_permiso'=>$id_permiso,
						'estado'=>1
					);
					$total=$this->usuario_model->buscar_padre_modulo_rol($id_rol,$data['bisabuelo']);
					if($total['total']==0)
						$this->usuario_model->guardar_permisos_rol($formuInfo); /*Guardando permisos del rol para el bisabuelo*/
				}
					
			}
		}
		$formuInfo = array(
			'id_rol'=>$id_rol,
			'id_modulo'=>77,
			'id_permiso'=>3,
			'estado'=>1
		);
		$this->usuario_model->guardar_permisos_rol($formuInfo); /*Guardando permisos del rol para salir del sistema*/
		
		$this->db->trans_complete();
		$tr=($this->db->trans_status()===FALSE)?0:1;
		ir_a('index.php/usuarios/roles/'.$tr.'/2');
	}
	
	/*
	*	Nombre: actualizar_rol
	*	Objetivo: Actualiza los registros de roles
	*	Hecha por: Leonel
	*	Modificada por: Oscar
	*	Última Modificación: 07/07/2014
	*	Observaciones: Ninguna.
	*/
	function actualizar_rol() 
	{
		$data['id_modulo']=ROLES;
		consultar_permiso(ROLES);
		
		$this->db->trans_start();
		$id_rol=$this->input->post('id_rol');
		$nombre_rol=strtoupper($this->input->post('nombre_rol'));
		$descripcion_rol=$this->input->post('descripcion_rol');
		
		$formuInfo = array(
			'id_rol'=>$id_rol,
			'nombre_rol'=>$nombre_rol,
			'descripcion_rol'=>$descripcion_rol
		);
		
		$this->usuario_model->actualizar_rol($formuInfo); /*Actualizar rol*/
		$this->usuario_model->eliminar_permisos_rol($id_rol); /*Eliminar permisos del rol*/
		$permiso=$this->input->post('permiso');
		
		for($i=0;$i<count($permiso);$i++) {
			if($permiso[$i]!="") {
				$explode_permiso=explode(",",$permiso[$i]);
				$id_modulo=$explode_permiso[0];
				$id_permiso=$explode_permiso[1];
				$formuInfo = array(
					'id_rol'=>$id_rol,
					'id_modulo'=>$id_modulo,
					'id_permiso'=>$id_permiso,
					'estado'=>1
				);
				$this->usuario_model->guardar_permisos_rol($formuInfo); /*Guardando permisos del rol*/
				
				$data=$this->usuario_model->buscar_padre_permisos_rol($id_modulo); 
				if($data['padre']!="") {
					$formuInfo = array(
						'id_rol'=>$id_rol,
						'id_modulo'=>$data['padre'],
						'id_permiso'=>$id_permiso,
						'estado'=>1
					);
					$total=$this->usuario_model->buscar_padre_modulo_rol($id_rol,$data['padre']);
					if($total['total']==0)
						$this->usuario_model->guardar_permisos_rol($formuInfo); /*Guardando permisos del rol para el padre*/
				}
				
				if($data['abuelo']!="") {
					$formuInfo = array(
						'id_rol'=>$id_rol,
						'id_modulo'=>$data['abuelo'],
						'id_permiso'=>$id_permiso,
						'estado'=>1
					);
					$total=$this->usuario_model->buscar_padre_modulo_rol($id_rol,$data['abuelo']);
					if($total['total']==0)
						$this->usuario_model->guardar_permisos_rol($formuInfo); /*Guardando permisos del rol para el abuelo*/
				}
				
				if($data['bisabuelo']!="") {
					$formuInfo = array(
						'id_rol'=>$id_rol,
						'id_modulo'=>$data['bisabuelo'],
						'id_permiso'=>$id_permiso,
						'estado'=>1
					);
					$total=$this->usuario_model->buscar_padre_modulo_rol($id_rol,$data['bisabuelo']);
					if($total['total']==0)
						$this->usuario_model->guardar_permisos_rol($formuInfo); /*Guardando permisos del rol para el bisabuelo*/
				}
					
			}
		}
		/*
		$formuInfo = array(
			'id_rol'=>$id_rol,
			'id_modulo'=>77,
			'id_permiso'=>3,
			'estado'=>1
		);
		$this->usuario_model->guardar_permisos_rol($formuInfo); /*Guardando permisos del rol para salir del sistema*/
		
		$this->db->trans_complete();
		$tr=($this->db->trans_status()===FALSE)?0:1;
		ir_a('index.php/usuarios/roles/'.$tr.'/1');
	}
	
	/*
	*	Nombre: eliminar_rol
	*	Objetivo: Elimina los registros de roles
	*	Hecha por: Leonel
	*	Modificada por: Oscar
	*	Última Modificación: 07/07/2014
	*	Observaciones: Ninguna.
	*/
	function eliminar_rol($id_rol=NULL)
	{
		$data['id_modulo']=ROLES;
		consultar_permiso(ROLES);
				
		$this->db->trans_start();
		$this->usuario_model->eliminar_rol($id_rol); /*Eliminar rol*/
		$this->usuario_model->eliminar_permisos_rol($id_rol); /*Eliminar permisos del rol*/
		$this->db->trans_complete();
		$tr=($this->db->trans_status()===FALSE)?0:1;
		ir_a('index.php/usuarios/roles/'.$tr.'/0');
	}
	
	/*
	*	Nombre: usuario
	*	Objetivo: Carga la vista para la administracion de los usuarios
	*	Hecha por: Leonel
	*	Modificada por: Oscar
	*	Última Modificación: 07/07/2014
	*	Observaciones: Ninguna.
	*/
	function usuario($estado_transaccion=NULL,$accion=NULL)
	{
		$data=$this->seguridad_model->consultar_permiso($this->session->userdata('id_usuario'),85); /*Verificacion de permiso para administrara usuarios*/
		
		if($data['id_permiso']==3) {
			switch($data['id_permiso']) { /*Busqueda de informacion a mostrar en la pantalla segun el nivel del usuario logueado*/
				case 1:
					$data['usuarios']=$this->usuario_model->mostrar_usuarios();
					break;
				case 2:
					$data['usuarios']=$this->usuario_model->mostrar_usuarios();
					break;
				case 3:
					$data['usuarios']=$this->usuario_model->mostrar_usuarios();
					break;
			}
			$data['estado_transaccion']=$estado_transaccion;
			if($accion==0)
				$data['accion']="elimina";
			if($accion==1)
				$data['accion']="actualiza";
			if($accion==2)
				$data['accion']="guarda";
			pantalla('usuarios/usuarios',$data);	
		}
		else {
			echo 'No tiene permisos para acceder';
		}
	}
		
	/*
	*	Nombre: datos_de_usuario
	*	Objetivo: Carga la vista del formulario creación o actualización de usuarios
	*	Hecha por: Leonel
	*	Modificada por: Oscar
	*	Última Modificación: 07/07/2014
	*	Observaciones: Ninguna.
	*/
	function datos_de_usuario($id_usuario=NULL)
	{
		$data=$this->seguridad_model->consultar_permiso($this->session->userdata('id_usuario'),85); /*Verificacion de permiso para administrara usuarios*/
		
		if($data['id_permiso']==3) {
			switch($data['id_permiso']) { /*Busqueda de informacion a mostrar en la pantalla segun el nivel del usuario logueado*/
				case 1:
					$id_seccion=$this->transporte_model->consultar_seccion_usuario($this->session->userdata('nr'));
					$data['empleados']=$this->usuario_model->empleados_sin_usuario($id_seccion['id_seccion']);
					break;
				case 2:
					$id_seccion=$this->transporte_model->consultar_seccion_usuario($this->session->userdata('nr'));
					$data['empleados']=$this->usuario_model->empleados_sin_usuario($id_seccion['id_seccion']);
					break;
				case 3:
					$data['empleados']=$this->usuario_model->empleados_sin_usuario();
					break;
			}
			$data['roles']=$this->usuario_model->mostrar_roles();
			
			if($id_usuario!=NULL)			
				$data['usu']=$this->usuario_model->mostrar_usuarios($id_usuario);
			else
				$data['usu']=array();
			
			$this->load->view('usuarios/formu_usuario',$data);	
		}
		else {
			echo 'No tiene permisos para acceder';
		}
	}
	
	/*
	*	Nombre: buscar_info_adicional_usuario
	*	Objetivo: Mostrar la informacion del usuario que se necesita crear
	*	Hecha por: Leonel
	*	Modificada por: Oscar
	*	Última Modificación: 07/07/2014
	*	Observaciones: Ninguna
	*/
	function buscar_info_adicional_usuario()
	{
		$data=$this->seguridad_model->consultar_permiso($this->session->userdata('id_usuario'),85); /*Verificacion de permiso para crear solicitudes*/
		
		if($data['id_permiso']==3) {
			$id_empleado=$this->input->post('id_empleado');
			$data=$this->usuario_model->info_adicional($id_empleado);
			if($data['usuario']!="")
				$estado=1;
			$json =array(
				'usuario'=>$data['usuario'],
				'estado'=>$estado
			);
			echo json_encode($json);
		}
		else {
			$json =array(
				'estado'=>0
			);
			echo json_encode($json);
		}
	}
	
	/*
	*	Nombre: guardar_usuario
	*	Objetivo: Guarda los registros de usuarios
	*	Hecha por: Leonel
	*	Modificada por: Oscar
	*	Última Modificación: 07/07/2014
	*	Observaciones: Ninguna.
	*/
	function guardar_usuario()
	{
		$data=$this->seguridad_model->consultar_permiso($this->session->userdata('id_usuario'),85);
		
		if($data['id_permiso']==3) {
			$this->db->trans_start();
			$id_empleado=$this->input->post('nombre_completo');
			$usuario=$this->input->post('usuario');
			$password=md5($this->input->post('password'));
			
			$data=$this->usuario_model->info_adicional($id_empleado);
			

			if($data['id_genero']==1) {
				$data['id_genero']="M";
			}
			else 
				$data['id_genero']="F";
			
			$formuInfo = array(
				'nombre_completo'=>$data['nombre'],
				'password'=>$password,
				'nr'=>$data['nr'],
				'sexo'=>$data['id_genero'],
				'usuario'=>$usuario,
				'id_seccion'=>$data['id_seccion'],
				'estado'=>1
			);
			
			$id_usuario=$this->usuario_model->guardar_usuario($formuInfo); /*Guardando usuario*/
			$id_rol=$this->input->post('id_rol');

			for($i=0;$i<count($id_rol);$i++) {
				$formuInfo = array(
					'id_rol'=>$id_rol[$i],
					'id_usuario'=>$id_usuario
				);
				$this->usuario_model->guardar_permisos_usuario($formuInfo); /*Guardando permisos del usuario*/
			}
			$this->db->trans_complete();
			$tr=($this->db->trans_status()===FALSE)?0:1;
			ir_a('index.php/usuarios/usuario/'.$tr.'/2');
		}
		else {
			echo 'No tiene permisos para acceder';
		}
	}
	
	/*
	*	Nombre: actualizar_usuario
	*	Objetivo: Actualiza los registros de usuarios
	*	Hecha por: Leonel
	*	Modificada por: Oscar
	*	Última Modificación: 07/07/2014
	*	Observaciones: Ninguna.
	*/
	function actualizar_usuario()
	{
		$data=$this->seguridad_model->consultar_permiso($this->session->userdata('id_usuario'),85);
		
		if($data['id_permiso']==3) {
			$this->db->trans_start();
			$id_usuario=$this->input->post('id_usuario');
						
			if($password!="") {			
				$formuInfo = array(
					'password'=>$password,
					'id_usuario'=>$id_usuario
				);
				$this->usuario_model->actualizar_usuario($formuInfo); /*Actualizar usuario*/
			}
			
			$this->usuario_model->eliminar_roles_usuario($id_usuario); /*Eliminar permisos del usuario*/
			
			$id_rol=$this->input->post('id_rol');

			for($i=0;$i<count($id_rol);$i++) {
				$formuInfo = array(
					'id_rol'=>$id_rol[$i],
					'id_usuario'=>$id_usuario
				);
				$this->usuario_model->guardar_permisos_usuario($formuInfo); /*Guardando permisos del usuario*/
			}
			$this->db->trans_complete();
			$tr=($this->db->trans_status()===FALSE)?0:1;
			ir_a('index.php/usuarios/usuario/'.$tr.'/1');
		}
		else {
			echo 'No tiene permisos para acceder';
		}
	}
	
	/*
	*	Nombre: eliminar_usuario
	*	Objetivo: Desvactiva los registros de usuarios
	*	Hecha por: Leonel
	*	Modificada por: Oscar
	*	Última Modificación: 07/07/2014
	*	Observaciones: No elimina, solo cambia a cero el estado del usuario.
	*/
	function eliminar_usuario($id_usuario=NULL)
	{
		$data=$this->seguridad_model->consultar_permiso($this->session->userdata('id_usuario'),85);
		
		if($data['id_permiso']==3) {
			$this->db->trans_start();
			$this->usuario_model->desactivar_usuario($id_usuario); /*Desactivar usuario*/
			/*$this->usuario_model->eliminar_usuario($id_usuario);*/ /*Eliminar usuario*/
			/*$this->usuario_model->eliminar_permisos_usuario($id_usuario);*/ /*Eliminar permisos del usuario*/
			$this->db->trans_complete();
			$tr=($this->db->trans_status()===FALSE)?0:1;
			ir_a('index.php/usuarios/usuario/'.$tr.'/0');
		}
		else {
			echo 'No tiene permisos para acceder';
		}
	}

	function enviar_claves($estado_transaccion=NULL,$enviados=NULL,$no_enviados=NULL)
	{

		$data['estado_transaccion']=$estado_transaccion;
		if ($enviados!=NULL&&$no_enviados!=NULL) {
			$data['msj']="Se enviarón <strong>$enviados <strong>correos, No se pudieron enviar $no_enviados correos ";
		}

		$id_edicion=$this->evaluacion_model->edicion_activa();
		$data['d']=$this->seguridad_model->evaluadores($id_edicion);
		$data['id_modulo']=ENVIAR_CLAVE;
		$data['id_edicion']=$id_edicion;
		pantalla('usuarios/evaluadores',$data);
	}
	function correo($id_empleado =NULL)
	{
		$id_edicion=$this->evaluacion_model->edicion_activa();
		$data['d']=$this->seguridad_model->correo_asignacion($id_edicion,$id_empleado);
		$this->load->view("usuarios/correo_asignacion",$data);

	}
	function enviar_correos_asignacion()
	{   
		$this->db->trans_start();

		$id_edicion=$this->evaluacion_model->edicion_activa();
		extract($_POST);
	
			$empleados=implode(',',$selecion);

			$info=$this->seguridad_model->correo_asignacion($id_edicion,$empleados);
				
			$en=$ne=0;

	foreach ($info as $data['d'] ) {
				
				$info['correo']=$data['d']['correo'];
				$info['id_empleado']=$data['d']['id_empleado'];
				$info['id_edicion']=$id_edicion;
				$info['estado']=0;				
				
				$id_enviado= $this->seguridad_model->guardar_enviado($info);
				$data['id_enviado']=$id_enviado;

				$html=$this->load->view("usuarios/correo_asignacion",$data,TRUE);					
				$this->usuario_model->asignar_rol($data['d']['id_usuario'], ROL_EVALUADOR);
				if ($data['d']['correo']!="") {

					$e=enviar_correo($data['d']['correo'],"Asignacion de personas a evaluar",$html);
					if($e){
						$this->seguridad_model->actualizar_enviado($id_enviado,1); 
						$en++;
					}else{  //algun error al procesar
						$ne++;
					}
				}else{ //no enviado por falta de correo
					$ne++;	
				}
			
		//if (++$c==30) break;

		}	
		$this->db->trans_complete();
		$tr=($this->db->trans_status()===FALSE)?0:1; 
			
		ir_a("index.php/usuarios/enviar_claves/".$tr."/".$en."/".$ne);
	}
	function log_envios($id_empleado=NULL){
		
		$id_edicion=$this->evaluacion_model->edicion_activa();
		$data['correos']=$this->seguridad_model->log_envios($id_empleado,$id_edicion);
		$data['style']="table-info";
		$this->load->view('usuarios/log_envios',$data);
	}

	function evaluadores_pdf($value='')
	{
		
		$id_edicion=$this->evaluacion_model->edicion_activa();
		$d=$this->evaluacion_model->ediciones($id_edicion);
		$data['edicion']=$d['nombre'];
		$data['base']=FALSE;
		 /*extract($_POST);			
		$empleados=implode(',',$selecion);
		*/
		$empleados="";
		$this->mpdf->mPDF('utf-8','letter',0, '', 4, 4, 6, 6, 9, 9); //Creacion de objeto mPDF con configuracion de pagina y margenes
		$stylesheet = file_get_contents('css/style-base.css'); // Selecionamos la hoja de estilo del pdf
		//$stylesheet = file_get_contents('css/prueba.css'); // Selecionamos la hoja de estilo del pdf
		$this->mpdf->WriteHTML($stylesheet,1); //lo escribimos en el pdf
		$data['eva']=$this->seguridad_model->correo_asignacion($id_edicion,$empleados);
		$html=$this->load->view('usuarios/evaluadores_pdf',$data,TRUE);
			
		$this->mpdf->WriteHTML($html,2); //la escribimos en el pdf
		$this->mpdf->Output(); /*Salida del pdf*/	

	}

}
?>
